name: CI - E2E - Mobile (webview) Browser
on:
  workflow_dispatch:

jobs:
  mobile-test:
    name: Test curriculum for mobile app
    runs-on: ubuntu-22.04
    strategy:
      matrix:
        node-version: [20.x]

    steps:
      - name: Checkout Source Files
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

      - name: Checkout mobile
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
        with:
          repository: freeCodeCamp/mobile
          path: mobile

      - name: Setup pnpm
        uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d #v3.0.0
        with:
          version: 8

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
        with:
          node-version: ${{ matrix.node-version }}
          # cypress-io/github-action caches the store, so we should not cache it
          # here.

      - name: Setup Flutter 3.13.x
        uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225 # v2
        with:
          flutter-version: '3.13.x'
          channel: 'stable'
          cache: true
          cache-key: flutter-3.13.x
          cache-path: ${{ runner.tool_cache }}/flutter

      - name: Set freeCodeCamp Environment Variables
        run: cp sample.env .env

      - name: Install and Build
        run: |
          pnpm install
          pnpm run create:shared
          pnpm run build:curriculum

      - name: Generate mobile test files
        run: |
          cd mobile/mobile-app
          echo "DEVELOPMENTMODE=true" > .env
          echo "NEWSURL=https://www.freecodecamp.org/news/ghost/api/v3/content/" >> .env
          flutter pub get
          flutter test test/widget_test.dart

        # This is a workaround for the fact that Cypress does not support
        # running in a sub-directory.
        #
        # In our cypress config, we default to the cypress/e2e/default directory.
        # We need to change this to cypress/e2e/ for the specific tests we are running
        # in this workflow.
        #
      - name: Adjust the Cypress Config
        run: |
          sed -i 's#cypress/e2e/default/#cypress/e2e/#g' cypress.config.js

      - name: Install serve
        run: npm install -g serve

      - name: Cypress run
        uses: cypress-io/github-action@v6
        with:
          record: ${{ env.CYPRESS_RECORD_KEY != 0 }}
          start: npx serve --no-request-logging
          wait-on: http://localhost:3000
          wait-on-timeout: 1200
          config: retries=1,screenshotOnRunFailure=false,video=false,baseUrl=http://localhost:3000/mobile/mobile-app/generated-tests/
          browser: chrome
          spec: cypress/e2e/mobile-learn/test-challenges.js
        env:
          CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
